JavaScript syntax
part 22/30 Β· 107.0 KB total
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Functions
A function is a block with a (possibly empty) parameter list that is
normally given a name. A function may use local variables. If a user
exits the function without a return statement, the value undefined is
returned.
function gcd(number1, number2) {
if (isNaN(number1*number2)) throw TypeError("Non-Numeric arguments not
allowed.");
number1 = Math.round(number1);
number2 = Math.round(number2);
let difference = number1 - number2;
if (difference === 0) return number1;
return difference > 0 ? gcd(number2, difference) : gcd(number1,
difference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`bdifference);`f`b
}
console.log(gcd(60, 40)); // 20
//In the absence of parentheses following the identifier 'gcd' on the
RHS of the assignment below,
//'gcd' returns a reference to the function itself without invoking it.
let mygcd = gcd; // mygcd and gcd reference the same function.
console.log(mygcd(60, 40)); // 20
Functions are first class objects and may be assigned to other
variables.
The number of arguments given when calling a function may not
necessarily correspond to the number of arguments in the function
definition; a named argument in the definition that does not have a
matching argument in the call will have the value undefined (that can be
implicitly cast to false). Within the function, the arguments may also
be accessed through the arguments object; this provides access to all
arguments using indices (e.g. arguments[0], arguments[1], ...
arguments[n]), including those beyond the number of named arguments.
(While the arguments list has a .length property, it is not an instance
of Array; it does not have methods such as .slice(), .sort(), etc.)
function add7(x, y) {
if (!y) {
y = 7;
}
console.log(x + y + arguments.length);
};
add7(3); // 11
add7(3, 4); // 9
Primitive values (number, boolean, string) are passed by value. For
objects, it is the reference to the object that is passed.
const obj1 = {a : 1};
const obj2 = {b : 2};
function foo(p) {
p = obj2; // Ignores actual parameter
p.b = arguments[1];
}
foo(obj1, 3); // Does not affect obj1 at all. 3 is additional parameter
console.log(`${obj1.a} ${obj2.b}`); // writes 1 3
Functions can be declared inside other functions, and access the outer
function's local variables. Furthermore, they implement full closures by
remembering the outer function's local variables even after the outer
function has exited.
let t = "Top";
let bar, baz;
function foo() {
let f = "foo var";
bar = function() { console.log(f) };
baz = function(x) { f = x; };
}
foo();
baz("baz arg");
bar(); // "baz arg" (not "foo var") even though foo() has exited.
console.log(t); // Top
An anonymous function is simply a function without a name and can be
written either using function or arrow notation. In these equivalent
examples an anonymous function is passed to the map function and is
applied to each of the elements of the array.cite-ref-20[20]
[1,2,3].map(function(x) { return x*2;); //returns [2,4,6]
[1,2,3].map((x) => { return x*2;}); //same result
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ